/**
 * 
 */
package co.edu.javeriana.ia.ga;

import java.io.Serializable;
import java.util.Map;

/**
 * <p>
 * Representa un genoma, que sera usado como base de clasificacion de las
 * secuencias
 * </p>
 * 
 * @author <a href=f.triana@javeriana.edu.co">Alejandro Triana</a>
 * @version 1.0
 */
public class Genome implements Serializable {

	private static final long serialVersionUID = 1L;

	private int internalId;

	private String name;

	private Map<String, Descriptor> descriptors;

	/**
	 * <p>
	 * Representa el id interno del genoma. Este id es usado como accion de las
	 * reglas en el proceso de clasificacion
	 * </p>
	 */
	public int getInternalId() {
		return internalId;
	}

	public void setInternalId(int internalId) {
		this.internalId = internalId;
	}

	/**
	 * <p>
	 * Nombre del genoma, o organismo al que pertenece
	 * </p>
	 */
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	/**
	 * <p>
	 * Representa los descriptores asociados al genoma. Estos descriptores son
	 * usados en el proceso de clasificacion
	 * </p>
	 */
	public Map<String, Descriptor> getDescriptors() {
		return descriptors;
	}

	public void setDescriptors(Map<String, Descriptor> descriptors) {
		this.descriptors = descriptors;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {

		if (!(obj instanceof Genome)) {
			return false;
		} else {
			Genome other = (Genome) obj;
			return other.getInternalId() == this.getInternalId();
		}
	}
	
	/*
	 * (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		
		StringBuilder build = new StringBuilder();
		
		build.append(internalId).append(Constants.PROPERTY_SEPARATOR);
		build.append(name);
		
		return build.toString();
	}
	
	/**
	 * <p>
	 * Permite obtener el objeto desde una cadena
	 * </p>
	 */
	public static Genome getFromString(String value) {
		Genome descriptor = new Genome();
		
		String[] strProps = value.split(Constants.PROPERTY_SEPARATOR);
		descriptor.setInternalId(Integer.valueOf(strProps[0]));
		descriptor.setName(strProps[1]);
		
		return descriptor;
	}

}
